package meiyunting.shiwuzhaoling.service;

import meiyunting.shiwuzhaoling.dto.ItemDTO;
import meiyunting.shiwuzhaoling.model.Item;
import meiyunting.shiwuzhaoling.model.ItemStatus;
import meiyunting.shiwuzhaoling.model.ItemType;
import meiyunting.shiwuzhaoling.model.User;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Optional;

/**
 * 物品信息服务接口
 */
public interface ItemService {
    
    /**
     * 创建新的失物/招领信息
     */
    Item createItem(ItemDTO itemDTO, MultipartFile image, User user);
    
    /**
     * 获取所有信息
     */
    List<Item> getAllItems();
    
    /**
     * 根据ID获取信息（返回Optional）
     */
    Optional<Item> getItemById(Long id);
    
    /**
     * 根据ID获取信息（如果不存在则抛出异常）
     */
    Item findItemById(Long id);
    
    /**
     * 根据状态获取信息
     */
    List<Item> getItemsByStatus(ItemStatus status);
    
    /**
     * 根据类型获取信息
     */
    List<Item> getItemsByType(ItemType type);
    
    /**
     * 根据状态和类型获取信息
     */
    List<Item> getItemsByStatusAndType(ItemStatus status, ItemType type);
    
    /**
     * 根据关键字搜索
     */
    List<Item> searchItems(String keyword);
    
    /**
     * 更新信息
     */
    Item updateItem(Long id, ItemDTO itemDTO, MultipartFile image, User user);
    
    /**
     * 删除信息
     */
    void deleteItem(Long id, User user);

    /**
     * 获取用户发布的物品
     */
    List<Item> getItemsByUser(User user);

    /**
     * 认领物品
     */
    Item claimItem(Long id, User user);
} 